﻿using RestSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace FluentRestSharp.Interface
{
    public interface IFluentResult
    {
		RestClient RestClient { get; }
		RestRequest RestRequest { get; }
		RestResponse GetResponse();
        Task<RestResponse> GetResponseAsync(CancellationToken cancellationToken = default);
        RestResponse<TResult> GetResponse<TResult>();
        Task<RestResponse<TResult>> GetResponseAsync<TResult>(CancellationToken cancellationToken = default);
        string GetContent();
        Task<string> GetContentAsync(CancellationToken cancellationToken = default);
        TResult GetResult<TResult>();
        Task<TResult> GetResultAsync<TResult>(CancellationToken cancellationToken = default);
        byte[] DownloadBytes();
        Task<byte[]> DownloadBytesAsync(CancellationToken cancellationToken = default);
        Stream DownloadStream();
        Task<Stream> DownloadStreamAsync(CancellationToken cancellationToken = default);
    }
}
